const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

exports.main = async (event, context) => {
  try {
    console.log('开始创建数据库索引...')

    // 1. matching_pool 集合索引（池管理）
    console.log('创建 matching_pool 集合索引...')
    // TTL 索引：根据 expireAt 自动过期清理
    try {
      await db.collection('matching_pool').createIndex({
        keys: { expireAt: 1 },
        options: {
          name: 'expireAt_ttl',
          expireAfterSeconds: 0
        }
      })
      console.log('✅ matching_pool TTL 索引创建成功')
    } catch (error) {
      console.log('⚠️ matching_pool TTL 索引可能已存在:', error.message)
    }

    // timeSlotKey 单键索引：按时段查询
    try {
      await db.collection('matching_pool').createIndex({
        keys: { timeSlotKey: 1 },
        options: { name: 'timeSlotKey_1' }
      })
      console.log('✅ matching_pool timeSlotKey 索引创建成功')
    } catch (error) {
      console.log('⚠️ matching_pool timeSlotKey 索引可能已存在:', error.message)
    }

    // userId 单键索引：按用户退池/清理
    try {
      await db.collection('matching_pool').createIndex({
        keys: { userId: 1 },
        options: { name: 'userId_1' }
      })
      console.log('✅ matching_pool userId 索引创建成功')
    } catch (error) {
      console.log('⚠️ matching_pool userId 索引可能已存在:', error.message)
    }

    // 2. study_records 集合索引（唯一事实来源）
    console.log('创建 study_records 集合索引...')
    // matchId 单键索引：同配对两条记录快速聚合
    try {
      await db.collection('study_records').createIndex({
        keys: { matchId: 1 },
        options: { name: 'matchId_1' }
      })
      console.log('✅ study_records matchId 索引创建成功')
    } catch (error) {
      console.log('⚠️ study_records matchId 索引可能已存在:', error.message)
    }

    // userId + status 联合索引：我的记录 + 状态过滤（waiting/not_started/ongoing/finished）
    try {
      await db.collection('study_records').createIndex({
        keys: { userId: 1, status: 1 },
        options: { name: 'userId_1_status_1' }
      })
      console.log('✅ study_records userId+status 联合索引创建成功')
    } catch (error) {
      console.log('⚠️ study_records userId+status 联合索引可能已存在:', error.message)
    }

    // 可选：userId + status + createTime（降序）——便于时间倒序分页
    try {
      await db.collection('study_records').createIndex({
        keys: { userId: 1, status: 1, createTime: -1 },
        options: { name: 'userId_1_status_1_createTime_-1' }
      })
      console.log('✅ study_records userId+status+createTime 联合索引创建成功')
    } catch (error) {
      console.log('⚠️ study_records userId+status+createTime 联合索引可能已存在:', error.message)
    }

    console.log('🎉 所有数据库索引创建完成！')

    return {
      success: true,
      message: '数据库索引创建完成（方案A）',
      details: {
        matching_pool: ['expireAt_ttl', 'timeSlotKey_1', 'userId_1'],
        study_records: ['matchId_1', 'userId_1_status_1', 'userId_1_status_1_createTime_-1']
      }
    }
  } catch (error) {
    console.error('创建索引失败:', error)
    return {
      success: false,
      error: error.message
    }
  }
}